// import { resolve } from 'path'
// import { hasPermission } from '@/utils/permission'
// import { isExternal } from '@/utils/validate'
// import { recordRoute } from '@/config'
// import qs from 'qs'
import { RouteRecordRaw } from 'vue-router'
import { tag } from '~/types/tabs'
/**
 * @description all模式渲染后端返回路由,支持包含views路径的所有页面
 * @param asyncRoutes
 * @returns {*}
 */
// export function convertRouter(asyncRoutes) {
//   return asyncRoutes.map((route) => {
//     if (route.component) {
//       if (route.component === 'Layout') {
//         route.component = () => import('@vab/layouts')
//       } else {
//         const index = route.component.indexOf('views')
//         const path =
//           index > 0 ? route.component.slice(index) : `views/${route.component}`
//         route.component = () => import(`@/${path}`)
//       }
//     }
//     if (route.children && route.children.length)
//       route.children = convertRouter(route.children)
//     if (route.children && route.children.length === 0) delete route.children
//     return route
//   })
// }

// /**
//  * @description 根据roles数组拦截路由
//  * @param routes 路由
//  * @param rolesControl 是否进行权限控制
//  * @param baseUrl 基础路由
//  * @returns {[]}
//  */
// export function filterRoutes(routes, rolesControl, baseUrl = '/') {
//   return routes
//     .filter((route) =>
//       rolesControl && route.meta && route.meta.guard
//         ? hasPermission(route.meta.guard)
//         : true
//     )
//     .map((route) => {
//       route = { ...route }
//       route.path =
//         route.path !== '*' && !isExternal(route.path)
//           ? resolve(baseUrl, route.path)
//           : route.path
//       if (route.children && route.children.length > 0) {
//         route.children = filterRoutes(route.children, rolesControl, route.path)
//         if (route.children.length > 0) {
//           route.childrenPathList = route.children.flatMap(
//             (_) => _.childrenPathList
//           )
//           if (!route.redirect)
//             route.redirect = route.children[0].redirect
//               ? route.children[0].redirect
//               : route.children[0].path
//         }
//       } else route.childrenPathList = [route.path]
//       return route
//     })
// }

/**
 * 根据path路径获取matched
 * @param routes 菜单routes
 * @param path 路径
 * @returns {*} matched
 */
// export function handleMatched(routes, path) {
//   return routes
//     .filter((route) => route.childrenPathList.indexOf(path) + 1)
//     .flatMap((route) =>
//       route.children ? [route, ...handleMatched(route.children, path)] : [route]
//     )
// }

/**
 * 生成单个多标签元素，可用于同步/异步添加多标签
 * @param tag route页信息
 * @return {tag|void} tag
 */
export function handleTabs(tag) {
  let parentIcon: string | null = null
  if (tag.matched)
    for (let i = tag.matched.length - 2; i >= 0; i--)
      if (!parentIcon && tag.matched[i].meta.icon)
        parentIcon = tag.matched[i].meta.icon
  if (!parentIcon) parentIcon = 'menu-line'
  const path = handleActivePath(tag, true)
  // @Tag: 这里不确定是否需要过滤
  // && tag.meta.tabHidden !== true
  if (tag.name && tag.meta) {
    return {
      path: path,
      query: tag.query,
      params: tag.params,
      name: tag.name,
      parentIcon,
      meta: { ...tag.meta }
    } as tag
  }
}

/**
 * 根据当前route获取激活菜单
 * @param route 当前路由
 * @param isTab 是否是标签
 * @returns {string|*}
 */
export function handleActivePath(route, isTab = false) {
  const { meta, path } = route
  const rawPath: string = route.matched
    ? route.matched[route.matched.length - 1].path
    : path
  const fullPath: string =
    route.query && Object.keys(route.query).length
      ? `${route.path}?${JSON.stringify(route.query)}`
      : route.path
  if (isTab) return meta.dynamicNewTab ? fullPath : rawPath
  if (meta.activeMenu) return meta.activeMenu

  return fullPath
}

/**
 * 获取当前跳转登录页的Route
 * @param currentPath 当前页面地址
 */
// export function toLoginRoute(currentPath) {
//   if (recordRoute && currentPath !== '/')
//     return {
//       path: '/login',
//       query: { redirect: currentPath },
//       replace: true
//     }
//   else return { path: '/login', replace: true }
// }

/**
 * 获取路由中所有的Name
 * @param routes 路由数组
 * @returns {*} Name数组
 */
// export function getNames(routes) {
//   return routes.flatMap((route) => {
//     const names = []
//     if (route.name) names.push(route.name)
//     if (route.children) names.push(...getNames(route.children))
//     return names
//   })
// }
/**
 * @description: 通过name查找指定路由
 * @return {*}
 */
export function findRouteByName(
  routes: RouteRecordRaw[],
  routeName
): boolean | RouteRecordRaw {
  let find: boolean | RouteRecordRaw = false
  routes.forEach((route) => {
    if (route.children && route.children.length) {
      if (!find) find = findRouteByName(route.children, routeName)
    }
    if (route.name === routeName) {
      find = route
    }
  })
  return find
}
